import axios from 'axios';

// 根据后端配置，正确的API路径应该是 http://localhost:8094/ais
console.log('初始化API服务，后端地址:', 'http://localhost:8094/ais');

// 创建axios实例
const apiClient = axios.create({
  baseURL: 'http://localhost:8094/ais',  // 根据application.yml中的context-path配置
  timeout: 300000,  // 300秒(5分钟)超时，因为大模型处理可能需要较长时间
  headers: {
    'Content-Type': 'application/json',
    'Access-Control-Allow-Origin': '*',
    'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
    'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token'
  },
  withCredentials: false
});

// 请求拦截器，添加调试信息
apiClient.interceptors.request.use(
  config => {
    console.log('发送请求:', config.method.toUpperCase(), config.url);
    console.log('请求数据:', config.data);
    console.log('请求头:', config.headers);
    return config;
  },
  error => {
    console.error('请求错误:', error);
    return Promise.reject(error);
  }
);

// 响应拦截器，统一处理响应
apiClient.interceptors.response.use(
  response => {
    // 如果响应成功，直接返回数据
    console.log('响应成功:', response.status, response.data);
    return response;
  },
  error => {
    // 如果响应失败，处理错误
    console.error('API请求失败:', error);
    if (error.response) {
      console.error('响应状态:', error.response.status);
      console.error('响应数据:', error.response.data);
      console.error('响应头:', error.response.headers);
    } else if (error.request) {
      console.error('请求已发送但没有收到响应:', error.request);
    } else {
      console.error('请求配置错误:', error.message);
    }
    return Promise.reject(error);
  }
);

// 健康检查服务
const healthService = {
  // 检查后端服务是否正常运行 - POST方法
  checkHealth() {
    return apiClient.post('/heart/healthy');
  },
  
  // 检查后端服务是否正常运行 - GET方法
  checkHealthGet() {
    return apiClient.get('/heart/healthy');
  },
  
  // 尝试直接访问根路径
  checkRoot() {
    return apiClient.get('/');
  },
  
  // 尝试所有可能的健康检查方法
  checkHealthAll() {
    console.log('尝试所有健康检查方法');
    // 尝试直接访问根路径
    return this.checkRoot()
      .catch(error => {
        console.log('根路径访问失败，尝试POST健康检查');
        // 如果根路径失败，尝试POST方法
        return this.checkHealth()
          .catch(error => {
            console.log('POST健康检查失败，尝试GET方法');
            // 如果POST失败，尝试GET方法
            return this.checkHealthGet();
          });
      });
  }
};

// 病历HTML提取服务
const htmlExtractionService = {
  // 测试API连接
  testExtract() {
    return apiClient.get('/api/medical/extract/test');
  },
  
  // 从文本提取JSON
  extractFromText(htmlContent) {
    return apiClient.post('/api/medical/extract', { htmlContent });
  },
  
  // 从文件提取JSON
  extractFromFile(file) {
    const formData = new FormData();
    formData.append('file', file);
    return apiClient.post('/api/medical/extract/file', formData, {
      headers: {
        'Content-Type': 'multipart/form-data',
      }
    });
  }
};

// 病历模板处理服务
const templateService = {
  // 一站式处理 - 文本
  processText(textContent) {
    return apiClient.post('/api/template/process/text', { textContent });
  },
  
  // 一站式处理 - 原始文本
  processRawText(textContent) {
    return apiClient.post('/api/template/process/raw', textContent, {
      headers: {
        'Content-Type': 'text/plain;charset=UTF-8',
      }
    });
  },
  
  // 一站式处理 - 文件
  processFile(file) {
    const formData = new FormData();
    formData.append('file', file);
    return apiClient.post('/api/template/process/file', formData, {
      headers: {
        'Content-Type': 'multipart/form-data',
      }
    });
  },
  
  // 步骤1: 提取键结构 - 文本
  extractKeysFromText(textContent) {
    // 修改为正确的请求格式，使用application/json格式
    return apiClient.post('/api/template/extract/keys/text', { textContent });
  },
  
  // 步骤1: 提取键结构 - 文件
  extractKeysFromFile(file) {
    const formData = new FormData();
    formData.append('file', file);
    return apiClient.post('/api/template/extract/keys/file', formData, {
      headers: {
        'Content-Type': 'multipart/form-data',
      }
    });
  },
  
  // 步骤2: 匹配模板
  matchTemplate(keysJson) {
    return apiClient.post('/api/template/match', { keysJson });
  },
  
  // 步骤3: 生成完整病历JSON
  generateFullRecord(originalText, matchedTemplate) {
    return apiClient.post('/api/template/generate', { 
      originalText, 
      matchedTemplate 
    });
  },

  // 检测并修复文本编码问题
  detectEncoding(text) {
    return apiClient.post('/api/template/detect-encoding', text, {
      headers: {
        'Content-Type': 'text/plain;charset=UTF-8',
      }
    });
  }
};

// 导出API服务
export default {
  healthService,
  htmlExtractionService,
  templateService,
  apiClient
}; 